package com.dyj.goodlife;

import com.dtflys.forest.annotation.Get;
import com.dyj.common.client.BaseClient;
import com.dyj.common.domain.DataAndExtraVo;
import com.dyj.common.domain.query.BaseQuery;
import com.dyj.common.interceptor.ClientTokenInterceptor;
import com.dyj.goodlife.domain.query.CreatePartnerOrderQuery;
import com.dyj.goodlife.domain.query.QueryPartnerOrderQuery;
import com.dyj.goodlife.domain.query.SaveCommissionQuery;
import com.dyj.goodlife.domain.vo.*;
import com.dyj.goodlife.handler.GroupPurchaseVerifyHandler;
import com.dyj.goodlife.handler.PartnerHandler;
import com.dyj.goodlife.handler.QueryOrderHandler;

import java.util.List;

/**
 * 生活服务商家应用
 */
public class DyGoodLifeClient extends BaseClient {


    /**
     * 通用接口->代运营->创建合作关系
     * @param body 创建合作关系请求值
     * @return
     */
    public DataAndExtraVo<CreatePartnerOrderVo> createPartnerOrder(CreatePartnerOrderQuery body) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).createPartnerOrder(body);
    }

    /**
     * 通用接口->代运营->合作列表获取
     * @param body 合作列表获取请求值
     * @return
     */
    public DataAndExtraVo<QueryPartnerOrderVo> queryPartnerOrder(QueryPartnerOrderQuery body) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).queryPartnerOrder(body);
    }
    /**
     * 通用接口->代运营->合作详情查询
     * @param orderId 订单id
     * @param withoutProductItems 是否不获取商品佣金 选填
     * @return
     */
    public DataAndExtraVo<GetPartnerOrderVo> getPartnerOrder(String orderId, String withoutProductItems) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).getPartnerOrder(orderId, withoutProductItems);
    }

    /**
     * 通用接口->代运营->创建/修改佣金
     * @param body 创建/修改佣金请求值
     * @return
     */
    public DataAndExtraVo<SaveCommissionVo> saveCommission(SaveCommissionQuery body) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).saveCommission(body);
    }



    /**
     * 通用接口->代运营->佣金变更记录列表
     * @param orderId 订单id
     * @param page 页码，起始页为1，默认为1 选填
     * @param size 页面大小，最大50，默认50 选填
     * @return
     */
    public DataAndExtraVo<QueryCommissionRecordVo> queryCommissionRecord(String orderId, Integer page, Integer size) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).queryCommissionRecord(orderId, page, size);
    }

    /**
     * 通用接口->代运营->佣金变更记录详情
     * @param orderId 订单id
     * @param recordId 佣金配置记录id
     * @return
     */
    public DataAndExtraVo<GetCommissionRecordVo> getCommissionRecord(String orderId,String recordId) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).getCommissionRecord(orderId, recordId);
    }

    /**
     * 通用接口->代运营->商品佣金详情
     * @param orderId 订单id
     * @param page 页数，起始页为1，默认1 选填
     * @param size 每页大小，最大50条，默认50 选填
     * @return
     */
    public DataAndExtraVo<QueryProductCommissionVo> queryProductCommission(String orderId, Integer page, Integer size) {
        return new PartnerHandler(configuration().getAgentByTenantId(tenantId, clientKey)).queryProductCommission(orderId, page,size);
    }


    /**
     * 通用接口->订单查询->订单查询
     * @param accountId <p>来客商户根账户ID</p><div class="syl-image-wrapper" align="center"><span class="syl-image-fixer" style="display: inline-block;"><img src="https://p9-developer-sign.bytemaimg.com/obj/developer-inner/open_admin/1721115085176/blob?x-expires=4874715085&x-signature=nLy8mIkLjYntmgPcwUvNJpUj9VY%3D" name="" alt=""></span></div>
     * @param createOrderEndTime <p><span style="color: #1F2329;">创单结束时间（秒时间戳，创单起止时间必须同时传入）</span></p> 选填
     * @param createOrderStartTime <p><span style="color: #1F2329;">创单起始时间 （秒时间戳，创单起止时间必须同时传入）</span></p> 选填
     * @param cursor <p>根据游标滚动请求，直到返回结果数量小于请求的size或未返回search_after结束；首页传"0"，之后传返回参数中的CursorValue string数组拼接的string，如CursorValue返回参数["0","1"]，则传"0,1"；如果传入此参数，会优先使用cursor翻页，而不是page翻页</p> 选填
     * @param extOrderId <p><span style="color: #1F2329;">开发者系统中的订单号</span></p> 选填
     * @param getSecretNumber 是否需要查询配送信息 选填
     * @param openId <p>抖音内部用户的一种唯一标识</p> 选填
     * @param orderId <p><span style="color: #1F2329;">抖音生活服务订单ID</span></p><p><span style="color: #1F2329;">见抖音-团购频道-订单详情</span></p><div class="syl-image-wrapper" align="center"><span class="syl-image-fixer" style="display: inline-block;"><img src="https://p9-developer-sign.bytemaimg.com/obj/developer-inner/open_admin/1722047035158/blob?x-expires=4875647035&x-signature=dZi3GSZFeICuxjuQby%2Fv9y5SknU%3D" name="image.png" alt="" width="279" height="280"></span></div> 选填
     * @param orderStatus 订单状态 选填
     * @param pageNum <p>页数从1开始，如果使用page分页，页数*大小不能超过10000</p>
     * @param pageSize <p><span style="color: #1F2329;">页大小，取值范围1～100</span></p>
     * @param updateOrderEndTime <p><span style="color: #1F2329;">修改结束时间（秒时间戳，修改起止时间必须同时传入）</span></p> 选填
     * @param updateOrderStartTime <p><span style="color: #1F2329;">修改起始时间 （秒时间戳，修改起止时间必须同时传入）</span></p> 选填
     * @return
     */
    public DataAndExtraVo<GetOpenOrderInfoVo> getOpenOrderInfo(String accountId, Long createOrderEndTime, Long createOrderStartTime, List<String> cursor, String extOrderId, Boolean getSecretNumber, String openId, String orderId, Integer orderStatus, Integer pageNum, Integer pageSize, Long updateOrderEndTime, Long updateOrderStartTime) {
        return new QueryOrderHandler(configuration().getAgentByTenantId(tenantId, clientKey)).getOpenOrderInfo(accountId, createOrderEndTime, createOrderStartTime, cursor, extOrderId, getSecretNumber, openId, orderId, orderStatus, pageNum, pageSize, updateOrderEndTime, updateOrderStartTime);
    }


    /**
     * 通用接口->团购核销->验券准备
     * @param accountId <p>核销商户根账户ID（云连锁/共管场景下，挂靠商户必传，其余场景可不传）</p> 选填
     * @param code <p>券码明文</p><p>常见于使用用户提供的券码手动输入商家后台进行验券的场景</p><p><span style="color: #F04142;"><span style="font-size: 14px;">encrypted_data和code二选一必传，两个都不传会报错</span></span></p> 选填
     * @param encryptedData <p>从二维码解析出来的标识</p><p>(传参前需要先进行URL编码，注意不要有空格)</p><p><span style="color: #F04142;"><span style="background-color: #F7F8FA;"><span style="font-size: 14px;">encrypted_data和code二选一必传，两个都不传会报错</span></span></span></p> 选填
     * @param poiId <p>操作核销的抖音门店id（必传）</p> 选填
     * @return
     */
    public DataAndExtraVo<FulfilmentCertificatePrepareVo> fulfilmentCertificatePrepare(String accountId,String code, String encryptedData,String poiId) {
        return new GroupPurchaseVerifyHandler(configuration().getAgentByTenantId(tenantId,clientKey)).fulfilmentCertificatePrepare(accountId,code,encryptedData,poiId);
    }
}
